<?php
/**
 * User:chendenan
 * Created On 2022/3/10 0010 23:30
 */
declare(strict_types=1);
namespace app\common\business;
//use app\common\lib\sms\AliSms;
use app\common\lib\ClassArr;
use app\common\lib\Num;
use app\common\lib\sms\DxwSms;
class Sms{
    public static function sendCode(string $phoneNumber,int $len,string $type="dxw") :bool{
        //生成验证码4位或6位
        $code = Num::getCode($len);
        //$sms = new DxwSms();
        //$res = $sms->send_verify_code($phoneNumber,$code, "【创瑞短信】", '0732');
        //$res = DxwSms::sendcode($phoneNumber,$len);
        //工厂模式
//        $type = ucfirst($type);
//        $class = "app\common\lib\sms\\".$type."Sms";
//        $res = $class::sendcode($phoneNumber,$code);
        //利用反射机制高度优化处理工厂模式
        $classStats = ClassArr::smsClassStat();
        $classObj = ClassArr::initClass($type,$classStats,[],true);
        $res = $classObj->sendCode($phoneNumber,$code);
//        if(is_object($classObj)){
//            $res = $classObj->sendCode($phoneNumber,$code);
//        }else{
//            $res = $classObj::sendCode($phoneNumber,$code); //静态类调用
//        }
//        $classObj = ClassArr::initClass($type,$classStats,[],false); //如果返回静态类
//        $classFunction= new \ReflectionMethod($classObj,'sendCode'); //实例化 sendCode
//        if($classFunction->isStatic()){ //判断该类中sendCode方法是不是静态方法
//            $res = $classObj::sendCode($phoneNumber,$code); //静态类调用
//        }else{
//            $res = (new $classObj)->sendCode($phoneNumber,$code);
//        }

        if($res===true){
            //需要把验证码记录到redis,并且给出一个失效时间 ； 1分钟
            cache(config("redis.code_pre").$phoneNumber,$code,config("redis.code_expire"));
        }
        return $res;
    }
}